package com.hu.mybatis.mapper;

import com.hu.mybatis.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SqlMapper {

    /**
      MyBatis获取参数值的两种方式: ${} 和 #{}
          ${} 本质字符串拼接
          #{} 本质占位符赋值

      MyBatis 获取参数值的各种情况
        1、mapper接口方法的参数为单个的字面量类型
            可以通过 ${} 和 #{} 以任意的名称获取参数值,但是需要注意 ${} 的单引号问题
        2、mapper 接口方法的参数为多个时
            此时 MyBatis 会将这些参数放在一个 map 集合中,以两种方式进行存储
              以 arg0、arg1... 为键,以参数为值
              以 param1、param2... 为键,以参数为值
            因此只需要通过 #{} 和 ${} 以键的方式访问值即可,但是需要注意 ${} 的单引号问题
        3、若 mapper 接口方法的参数有多个时,可以手动将这些参数放在一个 map 中存储
            只需要通过 #{} 和 ${} 以键的方式访问值即可,但是需要注意 ${} 的单引号问题
        4、mapper 接口方法的参数是实体类类型的参数
            只需要通过 #{} 和 ${} 以属性的方式访问属性值即可,但是需要注意 ${} 的单引号问题
        5、使用 @Param 注解命名参数
            此时 MyBatis 会将这些参数放在一个 map 集合中,以两种方式进行存储
              以 @Param 注解的值为键,以参数为值
              以 param1、param2... 为键,以参数为值
            因此只需要通过 #{} 和 ${} 以键的方式访问值即可,但是需要注意 ${} 的单引号问题
     */

    // 根据用户名模糊查询用户信息
    List<User> getUserByLike(@Param("username")String username);

    // 批量删除: 参数形式以逗号分隔
    Integer deleteBatch(@Param("ids") String ids);

    // 查询指定表中的数据(根据表名查询数据)
    List<User> getUserByTableName(@Param("tableName") String tableName);

    // 获取添加功能自增的主键
    void insertUser(User user);
}
